package $3exceptionhandler;

public class FnNullPointerException {

    public static void main(String[] args) {
        // NullPointerException 即空指针异常，俗称NPE。
        // 如果一个对象为null，调用其方法或访问其字段就会产生NullPointerException，这个异常通常是由JVM抛出的

        // 处理NullPointerException
        // 首先，必须明确，NullPointerException是一种代码逻辑错误。
        // 遇到NullPointerException，遵循原则是早暴露，早修复，严禁使用catch来隐藏这种编码错误

        // 好的编码习惯可以极大地降低NullPointerException的产生
        // 成员变量在定义时初始化

        // 使用空字符串""而不是默认的null可避免很多NullPointerException，编写业务逻辑时，用空字符串""表示未填写比null安全得多。
        // 返回空字符串""、空数组而不是null：这样可以使得调用方无需检查结果是否为null。

        // 小结
        // NullPointerException是Java代码常见的逻辑错误，应当早暴露，早修复；

        // 可以启用Java 14的增强异常信息来查看NullPointerException的详细错误信息。
        // java -XX:+ShowCodeDetailsInExceptionMessages Main.java

        String s = null;
        //System.out.println(s.toLowerCase());

        Person p = new Person();
        System.out.println(p.address.city.toLowerCase());
    }
}
class Person {
    String[] name = new String[2];
    Address address = new Address();
}

class Address {
    String city;
    String street;
    String zipcode;
}
